home *** CD-ROM | disk | FTP | other *** search
- package symantec.itools.multimedia;
-
- import java.awt.Canvas;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.image.ImageObserver;
- import java.awt.image.IndexColorModel;
- import java.awt.image.MemoryImageSource;
- import symantec.beans.Beans;
- import symantec.itools.lang.OS;
-
- public class Plasma extends Canvas implements Runnable {
- int[] xpoints = new int[5];
- int[] ypoints = new int[5];
- byte[] red = new byte[128];
- byte[] green = new byte[128];
- byte[] blue = new byte[128];
- byte[] buffer;
- byte[] costab;
- Dimension dim;
- IndexColorModel cModel;
- Image img;
- // $FF: renamed from: x1 byte
- byte field_0;
- // $FF: renamed from: x2 byte
- byte field_1;
- // $FF: renamed from: y1 byte
- byte field_2;
- // $FF: renamed from: y2 byte
- byte field_3;
- byte x1mod = 6;
- byte x2mod = 8;
- byte y1mod = 6;
- byte y2mod = 4;
- boolean keepGoing = true;
- boolean suspended = false;
- boolean stopThread = false;
- boolean Threadstopped = false;
- Thread displayThread;
- private boolean previewMode = false;
- private int iteration;
- private final int MAX_ITERATION_GC = 25;
-
- public Plasma() {
- this.dopalette();
- this.cModel = new IndexColorModel(7, 128, this.red, this.green, this.blue);
- this.costab = new byte[256];
- this.setupcos();
- this.createBuffer();
- }
-
- void createBuffer() {
- this.dim = ((Component)this).size();
- this.buffer = new byte[this.dim.width * (this.dim.height + 100)];
- this.img = null;
- }
-
- public synchronized void addNotify() {
- super.addNotify();
- this.displayThread = new Thread(this);
- this.displayThread.setPriority(1);
- this.displayThread.start();
- }
-
- public synchronized void removeNotify() {
- this.keepGoing = false;
- this.stopThread = false;
- if (this.displayThread != null) {
- this.displayThread.setPriority(10);
- this.displayThread.resume();
- }
-
- while(this.displayThread != null) {
- try {
- Thread.sleep(40L);
- } catch (Exception var1) {
- }
- }
-
- super.removeNotify();
- }
-
- public void startPlasma() {
- this.suspended = false;
- this.show();
- }
-
- public void stopPlasma() {
- this.suspended = true;
- }
-
- public synchronized void show() {
- if (this.displayThread != null) {
- if (this.stopThread) {
- this.stopThread = false;
- return;
- }
-
- this.displayThread.setPriority(10);
- this.displayThread.resume();
- }
-
- }
-
- public synchronized void hide() {
- if (!this.Threadstopped) {
- this.stopThread = true;
- this.displayThread.setPriority(10);
- }
-
- }
-
- public synchronized void reshape(int var1, int var2, int var3, int var4) {
- super.reshape(var1, var2, var3, var4);
- this.createBuffer();
- }
-
- public void setPreviewMode(boolean var1) {
- this.previewMode = var1;
- ((Component)this).invalidate();
- }
-
- public boolean getPreviewMode() {
- return this.previewMode;
- }
-
- public void run() {
- while(this.keepGoing) {
- if (!this.stopThread && !this.suspended && (this.previewMode || !Beans.isDesignTime())) {
- ((Component)this).repaint();
- }
-
- if (this.stopThread) {
- super.hide();
- this.Threadstopped = true;
- this.displayThread.setPriority(1);
- this.displayThread.suspend();
- this.Threadstopped = false;
- if (this.keepGoing) {
- super.show();
- this.displayThread.setPriority(1);
- }
- } else if (this.keepGoing) {
- try {
- Thread.sleep(100L);
- } catch (Exception var1) {
- }
- }
- }
-
- this.displayThread = null;
- }
-
- public void paint(Graphics var1) {
- if (!this.suspended && (this.previewMode || !Beans.isDesignTime())) {
- this.moveplasma();
- }
-
- if (this.img == null) {
- this.drawplasma();
-
- try {
- this.img = ((Component)this).createImage(new MemoryImageSource(this.dim.width, this.dim.height, this.cModel, this.buffer, 0, this.dim.width));
- } catch (Exception var2) {
- }
- }
-
- if (OS.isMacintosh()) {
- var1.clipRect(0, 0, this.dim.width, this.dim.height);
- }
-
- var1.drawRect(0, 0, this.dim.width - 1, this.dim.height - 1);
- var1.clipRect(1, 1, this.dim.width - 2, this.dim.height - 2);
- if (this.img != null) {
- if (OS.isMacintosh()) {
- var1.drawImage(this.img, 1, 1, (ImageObserver)null);
- } else {
- var1.drawImage(this.img, 1, 1, this);
- }
- }
-
- if (++this.iteration > 25) {
- System.gc();
- this.iteration = 0;
- }
-
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void drawplasma() {
- char var5 = (char)this.field_2;
- char var6 = (char)this.field_3;
-
- for(int var2 = 0; var2 < this.dim.height * this.dim.width; var2 += this.dim.width + this.dim.width + this.dim.width) {
- char var3 = (char)this.field_0;
- char var4 = (char)this.field_1;
-
- for(int var1 = 0; var1 < this.dim.width; var1 += 4) {
- this.buffer[var1 + var2] = (byte)(this.costab[var3 & 255] + this.costab[var4 & 255] + this.costab[var5 & 255] + this.costab[var6 & 255]);
- this.buffer[var1 + var2 + 1] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + 2] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + 3] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + 1] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + 2] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + 3] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + this.dim.width] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + this.dim.width + 1] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + this.dim.width + 2] = this.buffer[var1 + var2];
- this.buffer[var1 + var2 + this.dim.width + this.dim.width + 3] = this.buffer[var1 + var2];
- var3 = (char)(var3 + this.x1mod);
- var4 = (char)(var4 + this.x2mod);
- }
-
- var5 = (char)(var5 + this.y1mod);
- var6 = (char)(var6 + this.y2mod);
- }
-
- }
-
- public void moveplasma() {
- this.field_0 = (byte)(this.field_0 - this.x1mod * 2);
- this.field_2 = (byte)(this.field_2 + this.y1mod * 2);
- this.field_0 += (byte)((int)(Math.random() * (double)3.0F));
- this.field_1 -= (byte)((int)(Math.random() * (double)4.0F));
- this.field_2 += (byte)((int)(Math.random() * (double)3.0F));
- this.field_3 -= (byte)((int)(Math.random() * (double)5.0F));
- if (this.img != null) {
- this.img.flush();
- }
-
- this.img = null;
- }
-
- public void dopalette() {
- for(int var1 = 0; var1 < 32; ++var1) {
- this.red[var1] = -1;
- this.green[var1] = 0;
- this.blue[var1] = (byte)(var1 * 8);
- }
-
- for(int var2 = 32; var2 < 96; ++var2) {
- this.red[var2] = (byte)(255 - var2 * 8);
- this.green[var2] = (byte)(var2 * 8);
- this.blue[var2] = -1;
- }
-
- for(int var3 = 64; var3 < 96; ++var3) {
- this.red[var3] = 0;
- this.green[var3] = -1;
- this.blue[var3] = (byte)(255 - var3 * 8);
- }
-
- for(int var4 = 96; var4 < 128; ++var4) {
- this.red[var4] = (byte)(var4 * 8);
- this.green[var4] = (byte)(255 - var4 * 8);
- this.blue[var4] = 0;
- }
-
- }
-
- public void setupcos() {
- for(int var1 = 0; var1 < 256; ++var1) {
- this.costab[var1] = (byte)((int)((double)16.0F + Math.cos((double)var1 * (double)360.0F / (double)255.0F / (double)180.0F * Math.PI) * (double)15.0F));
- }
-
- }
- }
-